package com.headStorm.concurrent.queue;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class BlockingQueueUse {


   public static final BlockingQueue<String> queue = new ArrayBlockingQueue<String>(3);


    public static void main(String[] args) throws InterruptedException {
        //offer(E e)：如果队列没满，立即返回true； 如果队列满了，立即返回false-->不阻塞
        queue.offer("aa");

        //put(E 0)：如果队列满了，一直阻塞，直到队列不满了或者线程被中断-->阻塞
        queue.put("nn");
        /**
         * offer(E e, long timeout, TimeUnit unit)：在队尾插入一个元素,，如果队列已满，则进入等待，直到出现以下三种情况：-->阻塞
         * 被唤醒
         * 等待时间超时
         * 当前线程被中断
         */
        /**
         * poll()：如果没有元素，直接返回null；如果有元素，出队
         * take()：如果队列空了，一直阻塞，直到队列不为空或者线程被中断-->阻塞
         * poll(long timeout, TimeUnit unit)：如果队列不空，出队；如果队列已空且已经超时，返回null；如果队列已空且时间未超时，则进入等待，直到出现以下三种情况：
         * 被唤醒
         * 等待时间超时
         * 当前线程被中断
         */
        System.out.println(queue.poll());
        System.out.println(queue.size());
        System.out.println(queue.poll());
        System.out.println(queue.take());
        System.out.println(queue.size());

    }
}
